跳到主要内容

[toc]

Self Service Password

Self Service Password github地址

Self Service Password 官网

Self Service Password官方安装文档

遇到的报错

报错1 访问报错 Token encryption requires a random string in keyphrase setting

github issue中有提到这个问题

问题说明链接

iShot2021-09-18_15.21.21

解决方法

修改
$keyphrase = "secret";
修改为任意字符的随机字符串
$keyphrase = "yaldnfaopewnrganadnfa";

报错2 无法修改密码,日志报错用户未发现

[Sat Sep 18 08:06:20.175684 2021] [php7:notice] [pid 18] [client 10.0.17.251:56444] LDAP - User xiaoming not found, referer: http://172.30.100.4:8000/index.php
10.0.17.251 - - [18/Sep/2021:08:06:20 +0000] "POST /index.php HTTP/1.1" 200 1841 "http://172.30.100.4:8000/index.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"

问题所在,需要修改以下配置,objectClass=person 是官方示例的写法,需要把person修改为具体的过滤内容,例如修改为 *

$ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";

修改为如下

$ldap_filter = "(&(objectClass=*)($ldap_login_attribute={login}))";

报错3 密码被LDAP服务器拒绝

iShot_2022-07-28_17.34.09

日志报错如下

[Thu Jul 28 09:17:27.537279 2022] [php7:warn] [pid 18] [client 172.20.20.2:54960] PHP Warning:  ldap_mod_replace(): Modify: Insufficient access in /var/www/lib/functions.inc.php on line 499, referer: http://172.20.20.4:8000/
[Thu Jul 28 09:17:27.537321 2022] [php7:notice] [pid 18] [client 172.20.20.2:54960] LDAP - Modify password error 50 (Insufficient access), referer: http://172.20.20.4:8000/
172.20.20.2 - - [28/Jul/2022:09:17:27 +0000] "POST / HTTP/1.1" 200 2016 "http://172.20.20.4:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
[Thu Jul 28 09:18:16.669056 2022] [php7:warn] [pid 19] [client 172.20.20.2:54991] PHP Warning: ldap_mod_replace(): Modify: Insufficient access in /var/www/lib/functions.inc.php on line 499, referer: http://172.20.20.4:8000/
[Thu Jul 28 09:18:16.669104 2022] [php7:notice] [pid 19] [client 172.20.20.2:54991] LDAP - Modify password error 50 (Insufficient access), referer: http://172.20.20.4:8000/
172.20.20.2 - - [28/Jul/2022:09:18:16 +0000] "POST / HTTP/1.1" 200 2012 "http://172.20.20.4:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
172.20.20.2 - - [28/Jul/2022:09:19:07 +0000] "-" 408 0 "-" "-"

iShot_2022-07-28_17.42.50

解决方法

修改 $who_change_password = "user";
修改为 $who_change_password = "manager";

1.Self Service Password简介

简介

  • Self Service Password是一个PHP应用程序,允许用户在LDAP目录中更改密码。

  • 该应用程序可以用于标准的LDAPv3目录(OpenLDAP、OpenDS、ApacheDS、Sun Oracle DSEE、Novell等),也可以用于Active Directory。

特点:

  • Samba模式,修改Samba密码

  • 活动目录模式

  • 本地密码策略:

    • 最小/最大长度

    • 禁止字符

    • 上、下、数字或特殊字符计数器

    • 重用旧密码检查

    • 密码与登录名相同

    • 复杂性(不同类型的字符)

  • 帮助信息

  • 重置的问题

  • 通过邮件挑战重置(通过邮件发送的令牌)

  • 通过短信重置(通过外部Email 2短信服务或短信API)

  • 修改LDAP目录下的SSH Key

  • 验证码(内置)

  • 更改密码后的邮件通知

  • 修改密码之前和之后的挂钩脚本

2.安装

2.1 标准安装

2.2 dokcer安装

self service password dockerhub地址

⚠️官方文档docker启动命令有坑,这里稍做了一下修改

# /var/www/conf/config.inc.local.php在ssp容器中是一个空目录!!!
-v /home/test/ssp.conf.php:/var/www/conf/config.inc.local.php

创建volume

docker volume create ssp

直接启动容器

docker run \
-d \
--restart=always \
--name self-service-password \
-h self-service-password \
-p 8000:80 \
-v ssp:/var/www/conf/ \
-it docker.io/ltbproject/self-service-password:latest

3.配置ldap连接

修改配置文件 config.inc.php

# LDAP
$ldap_url = "ldap://172.30.100.17:389"; // 修改为ldap服务器地址
$ldap_starttls = false;
$ldap_binddn = "cn=admin,dc=qike,dc=com"; // ldap管理员账号
$ldap_bindpw = '123456'; // ldap管理员密码
// for GSSAPI authentication, comment out ldap_bind* and uncomment ldap_krb5ccname lines
//$ldap_krb5ccname = "/path/to/krb5cc";
$ldap_base = "dc=qike,dc=com"; // ldap搜索参数
$ldap_login_attribute = "uid";
$ldap_fullname_attribute = "cn";
$ldap_filter = "(&(objectClass=*)($ldap_login_attribute={login}))"; // 用户搜索规则
$ldap_use_exop_passwd = false;
$ldap_use_ppolicy_control = false;

修改完成后重启docker容器

docker restart self-service-password

4.访问

浏览器访问 IP:8000

iShot2021-09-20_19.29.51

5.配置修改密码策略

修改配置文件 config.inc.php

# 设置密码长度
$pwd_min_length = 4; # 最少位数
$pwd_max_length = 8; # 最多位数

# 设置大小写、数字、特殊字符最小数量
$pwd_min_lower = 3; # 小写字母
$pwd_min_upper = 1; # 大写字母
$pwd_min_digit = 1; # 数字
$pwd_min_special = 1; # 特殊字符

# 禁止符号出现
$pwd_forbidden_chars = "@%"; # @和%不能出现在密码中

# 不同类别字符
$pwd_complexity = 2; # 大小写、数字、特殊字符最少2种

# 禁止使用旧密码作为新密码
$pwd_no_reuse = true;

# 新密码最少包含3种不同的字符
$pwd_diff_last_min_chars = 3;

# 密码中不能出现的单词
$pwd_forbidden_words = array("azerty", "qwerty", "password");

# 总是向用户显示密码策略
$pwd_show_policy = always

# 配置策略是显示在表单上方还是下方
$pwd_show_policy_pos = "above";

# 当密码被拒绝时,您可以显示目录返回的错误信息。消息内容取决于您的 LDAP 服务器软件。
$show_extended_error = true;

$pwd_show_policy 选项用于向用户显示密码策略,有3个值

  • always: 策略总是显示

  • never: 策略从不显示

  • onerror: 仅当密码因此被拒绝时才显示策略,并且用户正确提供了他的旧密码。

配置完成后重启容器,刷新页面,刚才配置的密码策略就显示出来了

iShot2021-09-20_20.30.08

6.配置邮件重置密码

⚠️在self service password中使用邮箱重置密码功能的前提是邮箱必须是ldap中用户绑定的邮箱

修改配置文件 config.inc.php

配置邮件

有关PHPMailer更多信息,请参阅 https://github.com/PHPMailer/PHPMailer

# 配置发件人名称
$mail_from = "admin@example.com";
$mail_from_name = "Self Service Password administrator";
$mail_signature = "";

# 更改密码通知,使用此选项在邮件更改成功后立即向用户发送确认邮件
$notify_on_change = true;

# PHPMailer 配置
$mail_sendmailpath = '/usr/sbin/sendmail';
$mail_protocol = 'smtp';
$mail_smtp_debug = 0;
$mail_debug_format = 'html';
$mail_smtp_host = 'localhost'; # smtp地址
$mail_smtp_auth = true; # 这里设置为true
$mail_smtp_user = ''; # 发件人邮箱用户名
$mail_smtp_pass = ''; # 发件人邮箱密码
$mail_smtp_port = 25; # 端口
$mail_smtp_timeout = 30;
$mail_smtp_keepalive = false;
$mail_smtp_secure = 'tls';
$mail_smtp_autotls = true;
$mail_smtp_options = array();
$mail_contenttype = 'text/plain';
$mail_wordwrap = 0;
$mail_charset = 'utf-8';
$mail_priority = 3;

配置邮件重置密码

# 开启邮件重置密码功能
$use_tokens = true;

# 配置加密,保护会话标识
$crypt_tokens = true;

# 令牌ttl,以便在未使用时将其删除,单位秒
$token_lifetime = "3600";

# 配置日志路径,默认情况下,生成的 URL 会记录在默认的 Apache 错误日志中。可以更改此行为以登录特定文件。apache用户对此目录必须有写入权限
$reset_request_log = "/var/log/self-service-password";

# 配置重定向url,在ssp前有代理的情况下使用,例如使用了nginx
$reset_url = $_SERVER['HTTP_X_FORWARDED_PROTO'] . "://" . $_SERVER['HTTP_X_FORWARDED_HOST'] . $_SERVER['SCRIPT_NAME'];

在邮件选项下输入ldap中绑定的邮箱就可以发出重置邮件了

iShot2021-09-20_21.11.15

收到的密码重置邮件

使用电脑客户端链接是纯文本的,但是在浏览器中打开是超链接

iShot2021-09-20_21.30.00

在密码重置邮件中点击链接访问就可以修改密码了

iShot2021-09-20_21.13.12

重置密码的邮箱必须是ldap中用户绑定的邮箱,输入其他邮箱会报错邮箱与用户不一致

iShot2021-09-20_21.17.37